//
//  TestViewController.swift
//
//
//  Created by xyanl on 2025/3/13.
//

import UIKit

class TestViewController: BaseTableViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let button = UIButton(type: .custom)
        button.setTitle("下一页", for: .normal)
                view.addSubview(button)
        button.frame = CGRect(x: 100, y: 0, width: 100, height: 60)
        button.backgroundColor = .purple
        button.addTarget(self, action: #selector(goToOther), for: .touchUpInside)
        
        tableView.delegate = self
        tableView.dataSource = self
        tableView.snp.remakeConstraints { make in
            make.left.right.bottom.equalToSuperview()
            make.top.equalToSuperview().offset(100)
        }
        
        if let presentationController = self.presentationController {
            presentationController.delegate = self
        }
        
    }
    
    @objc func goToOther() {
        let vc = TestViewController()
        view.backgroundColor = .randomColor
        setSheetPresentViewController(vc)
        present(vc)
    }
    
    
    
    func setSheetPresentViewController(_ viewController: UIViewController) {
        if #available(iOS 15.0, *) {
            let sheet = viewController.sheetPresentationController!
            // detents 属性是用来指定 sheet 的高度阵列
            // .medium() 半屏  .large() 全屏
            // sheet.detents = [.medium(), .large()]
            
            // 支持的自定义显示大小
            if #available(iOS 16.0, *) {
                sheet.detents = [
                    .custom { _ in
                        xScreenH*2/3 // 固定大小
                    }]
            } else {
                // Fallback on earlier versions
                sheet.detents = [.medium()]
            }
            
            // 在 Sheet 的顶部显示一个 Grabber (抓取器, 顶部的横线, 触发事件)
            sheet.prefersGrabberVisible = false
            // 页面圆角
            sheet.preferredCornerRadius = 25
            
            // 在显示 Bottom Sheet 的时候，底层的视图会自动变暗。
            // 如果我们想保持底层视图的光度，设置为 UISheetPresentationControllerDetentIdentifierLarge
            // 设置后点击viewController 外部的空白区域不会收起
            // sheet.largestUndimmedDetentIdentifier = UISheetPresentationControllerDetentIdentifierMedium
            
            // 在我们向上滚动内容时，Sheet 也会被展开， 这并不是我们想要的效果。我们希望在滚动内容时，Sheet 的大小可以保持不变。
            // 防止页面内容滚动和 sheet 的滚动冲突
            sheet.prefersScrollingExpandsWhenScrolledToEdge = false
            // 默认值为NO，这意味着工作表默认为紧凑高度的全屏外观。
            // 将此值设置为YES，以便在紧凑型高度尺寸类中使用备用外观， 使工作表仅附着在底部边缘的屏幕上。
            sheet.prefersEdgeAttachedInCompactHeight = false
            // 一个布尔值，用于确定工作表的宽度是否与其视图控制器的首选内容大小相匹配。
            sheet.widthFollowsPreferredContentSizeWhenEdgeAttached = false
            
        } else {
            
        }
    }
}

extension TestViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        50
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCell(withIdentifier: "UITableViewCell")
        if cell == nil {
            cell = UITableViewCell.init(style: .default, reuseIdentifier: "UITableViewCell")
        }
        cell?.contentView.backgroundColor = .randomColor
        return cell!
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        60
    }
    
}
extension TestViewController: UISheetPresentationControllerDelegate {
    func presentationControllerShouldDismiss(_ presentationController: UIPresentationController) -> Bool {
        // false: 禁止向下滑动返回上一级页面，禁止 dismiss
        print("Dismissal requested") // 确保这行被打印出来
        return false
    }
    
}
